home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / amos / moreuselssprgs.lha / SamLPDemo.AMOS / SamLPDemo.amosSourceCode
AMOS Source Code  |  1997-04-15  |  3KB  |  119 lines

  1. '
  2. ' SamLongPlay Procedures V1.0
  3. '
  4. ' Written by Christopher Hodges
  5. '
  6. Screen Open 0,320,200,2,0
  7. Curs Off 
  8. Palette 0,$FFF
  9. Dim SDAT(3,8)
  10. Global SDAT()
  11. '
  12. ' Hier muessen Sie Ihr Soundverzeichnis eintragen, falls Sie die 
  13. ' Sounds auf Festplatte kopiert haben
  14. '
  15. Dir$="LibDisk4:sounds"
  16. Print "Bitte Taste dr�cken!"
  17. '
  18. ' Aus Platzgr�nden konnten die anderen beiden Sounds nicht mehr
  19. ' auf diese Diskette kopiert werden. Sie k�nnen hier ihre eigenen
  20. ' Samples einf�gen.
  21. '
  22. 'SAMLP["sound6",1,15000,12748,3,16,32] 
  23. 'SAMLP["sound5",1,7000,0,3,16,16]
  24. SETSAM["sound4",1,7000,12748,16,32]
  25. Timer=0
  26. Print "during main-loop!"
  27. Repeat 
  28.   A$="Playing "
  29.   S=Timer/3000
  30.   If S<10 Then A$=A$+"0"
  31.   A$=A$+Mid$(Str$(S),2)+":"
  32.   S=(Timer/50) mod 60
  33.   If S<10 Then A$=A$+"0"
  34.   A$=A$+Mid$(Str$(S),2)+":"
  35.   S=(Timer mod 50)*2
  36.   If S<10 Then A$=A$+"0"
  37.   A$=A$+Mid$(Str$(S),2)+" Minutes..."
  38.   Home : Print A$
  39.   MANLP[1]
  40. Until(Inkey$<>"") or(Mouse Key>0)
  41. FINSAM[1]
  42. End 
  43. Procedure SAMLP[F$,V,FREQ,LOP,QUIT,BANK,BUF]
  44.   VV=1 : If V Then For A=1 To V : Add VV,VV : Next 
  45.   Erase BANK : Reserve As Chip Work BANK,BUF*1048
  46.   Open In V+1,F$
  47.   LS=Lof(V+1) : LB=BUF*512
  48.   B=0 : FL=0 : S=Start(BANK) : L=LS
  49.   Repeat 
  50.     LL=Min(L,LB)
  51.     If L-LL>0 and L-LL<LB/2 Then LL=LB/2
  52.     Sload V+1 To S+B*LB,LL
  53.     If FL
  54.       Sam Swap VV To S+B*LB,LL
  55.       While Sam Swapped(V)=0
  56.         If((Inkey$<>"") and(QUIT and 1)) or((Mouse Key>0) and(QUIT and 2))
  57.           Sam Stop VV
  58.           Close V+1
  59.           Erase BANK
  60.           Pop Proc
  61.         End If 
  62.       Wend 
  63.     Else 
  64.       Sam Raw VV,S+B*LB,LL,FREQ
  65.       FL=1
  66.     End If 
  67.     B=1-B
  68.     Add L,-LL
  69.     If L=0 and LOP>-1 Then Pof(V+1)=LOP : L=LS-LOP+1
  70.   Until L=0
  71.   Fill S+B*LB To S+B*LB+LB,0
  72.   Sam Swap VV To S+B*LB,LB
  73.   While Sam Swapped(V)=0 : Wend 
  74.   Sam Stop VV
  75.   Close V+1
  76.   Erase BANK
  77. End Proc
  78. Procedure SETSAM[F$,V,FREQ,LOP,BANK,BUF]
  79.   VV=1 : If V Then For A=1 To V : Add VV,VV : Next 
  80.   SDAT(V,0)=VV
  81.   SDAT(V,1)=BANK
  82.   Erase BANK : Reserve As Chip Work BANK,BUF*1048
  83.   Open In V+1,F$
  84.   SDAT(V,2)=Lof(V+1) : SDAT(V,3)=BUF*512
  85.   SDAT(V,4)=SDAT(V,2) : SDAT(V,5)=0 : SDAT(V,6)=0
  86.   SDAT(V,7)=LOP : SDAT(V,8)=FREQ
  87. End Proc
  88. Procedure MANLP[V]
  89.   If Sam Swapped(V)=0 or SDAT(V,4)=0 Then Pop Proc
  90.   S=Start(SDAT(V,1))
  91.   L=SDAT(V,4) : LB=SDAT(V,3)
  92.   LL=Min(L,LB) : VV=SDAT(V,0)
  93.   If L-LL>0 and L-LL<LB/2 Then LL=LB/2
  94.   A=SDAT(V,5)*LB
  95.   Sload V+1 To S+A,LL
  96.   If SDAT(V,6)
  97.     Sam Swap VV To S+A,LL
  98.   Else 
  99.     Sam Raw VV,S+A,LL,SDAT(V,8)
  100.     SDAT(V,6)=1
  101.   End If 
  102.   SDAT(V,5)=1-SDAT(V,5)
  103.   Add L,-LL
  104.   If L=0 and SDAT(V,7)>-1 Then Pof(V+1)=SDAT(V,7) : L=SDAT(V,2)-SDAT(V,7)
  105.   SDAT(V,4)=L
  106. End Proc[SDAT(V,4)]
  107. Procedure FINSAM[V]
  108.   Sam Stop SDAT(V,0)
  109.   Close V+1
  110.   Erase SDAT(V,1)
  111. End Proc
  112. Procedure WAISAM[V]
  113.   S=Start(SDAT(V,1))
  114.   LB=SDAT(V,3)
  115.   A=SDAT(V,5)*LB
  116.   Fill S+A To S+A+LB,0
  117.   Sam Swap SDAT(V,0) To S+A,LB
  118.   While Sam Swapped(V)=0 : Wend 
  119. End Proc